package com.controller;

import com.vo.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Map;

@Controller
//提供了映射地址的基本路径，不能单独在类级别使用
@RequestMapping("/demo")
public class DemoController {


    /**
     * 请求映射：对浏览器地址栏的url与需要执行的方法进行映射
     * value/path : 映射路径
     * method:指定请求的方式，如果不设置，默认接收所有的方式
     * params:限制请求的参数
     * headers:限制请求头,方式与params一样的
     *
     * Ant风格
     *  通配符
     *      ?   一个任意字符
     *      *   多个任意字符或一层目录
     *      **  0或多层目录
     * @param dataMap
     * @return
     */

    @RequestMapping(value = "/**/hello")
    public String helloWorld(Map<String,String> dataMap){


        dataMap.put("name","赵圣骏");

        return "helloWorld";

    }

    /**
     * 进入到用户登录页面
     * @return
     */
    @RequestMapping("/loginPage")
    public String intoLoginPage(){
        return "login";
    }


    /**
     * 把页面中的内容传递给Controller
     * @RequestParam
     *  value：表示页面中需要传递过来的参数
     *  required：是否为必须传递，默认是必须传递
     *  String name：把页面中的相应参数赋给方法中的形参，可以在方法中使用
     * 如果页面中需要传递的参数名与方法中的参数名一致的话，可以不加 @RequestParam
     *
     * @RequestHeader
     *  获取请求头信息中的内容
     *
     *
     * @param dataMap
     * @param username
     * @param pass
     * @param code
     * @return
     */
    @RequestMapping("/login")
    public String login(
            Map<String,String> dataMap,
            String username,
            @RequestParam(value = "password") String pass,
            @RequestParam(value = "code",required = false) String code,
            @RequestHeader("Connection") String headerConn,
            @CookieValue(value = "JSESSIONID",required = false) String sessionId
    ) {

        System.out.println("headerConnection===="+headerConn);

        System.out.println("sessionId===="+sessionId);

        //初始化一个返回的内容字符串
        String backStr = "";

        //模拟登录的过程
        if (username.equals("tom") && pass.equals("123")) {
            backStr = "登录成功";
        } else {
            backStr = "登录失败";
        }

        //携带返回的结果进入到相应的jsp页面
        dataMap.put("backInfo",backStr);

        return "login";

    }

    /**
     * 进入到学生信息注册页面
     * @return
     */
    @RequestMapping("/registerPage")
    public String intoStuRegisterPage(){
        return "student";
    }

    /**
     *
     * 接收 POJO 类型的参数
     * 如果页面中需要传递的属性名与实体类中的属性名保持一致，可以直接以实体类对象的形式接收数据
     *
     * 注册学生信息
     * @return
     */
    @RequestMapping("/stuRegister")
    public String stuRegister(Student student){
        System.out.println(student);

        return "student";
    }


    /**
     * 进入到图书页面
     * @return
     */
    @RequestMapping("/bookPage")
    public String intoBookPage(){
        return "book";
    }

    /**
     * 把url映射地址可以根据参数 设置为动态定义
     * @param bookId
     * @return
     */
    @RequestMapping("/book/{bookId}")
    public String getBook(@PathVariable("bookId") int bookId){
        System.out.println("bookid:"+bookId);
        return "book";
    }


    @RequestMapping("/deleteUserPage")
    public String intoDeleteUserPage(){
        return "deleteUser";
    }

    /**
     * 使用的方便程度比直接入参要麻烦一点
     * 但是使用习惯与servlet一致
     * @param request
     * @param response
     * @return
     */
    @RequestMapping("/deleteUser")
    public String deleteUser(HttpServletRequest request, HttpServletResponse response){

        String userId = request.getParameter("userId");

        if(Integer.parseInt(userId)<10){
            System.out.println("成功删除了"+userId+"用户");
            request.setAttribute("info","删除成功");
        }else{
            System.out.println("删除"+userId+"用户失败");
            request.setAttribute("info","删除失败");
        }


        return "deleteUser";
    }






}
